iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0
Security

密碼學小白的學習之路系列 第 20

[Day 20] 題目(Symmetric-2、3)

  • 分享至 

  • xImage
  •  

Resisting Bruteforce

https://cryptohack.org/courses/symmetric/aes1/

內文摘要:

  1. 安全性標準
  • 如果一個區塊密碼足夠安全,那麼攻擊者應該無法區分 AES 的輸出和隨機位元排列之間的差異。
  • 只能暴力破解所有可能的密鑰外來解密。
  • 隨機位元排列(Pseudorandom permutation):將一組位元隨機重新排列,所有排列方式都有可能。
    -理想的加密算法輸出應該看起來像完全隨機的位元排列,無法被預測或區分。
  1. 暴力破解的困難度
  • 暴力破解一個 128 位元的密鑰空間是非常困難的。
  • 有人估計,即使利用整個比特幣挖礦網絡的計算能力來破解 AES-128 密鑰,也需要比宇宙年齡多出百倍的時間才能完成。
  1. AES 的最佳攻擊方法
  • 目前已知針對 AES 的最佳單密鑰攻擊方法是 Biclique 攻擊(Biclique attack)
    • 略優於暴力破解,使 AES-128 的安全等級從 128 位元降至 126.1 位元。
    • 這種攻擊方法已有超過 8 年沒有改進,因此不被視為對 AES 安全性構成可信威脅。
    • 但從理論上來說,這種攻擊可以被認為在某種程度上「破解」了 AES。
  1. 量子計算機的影響
  • 量子計算機可能完全破解像 RSA 這樣的公鑰加密系統
  • 但對於對稱加密系統(如 AES),只能將其安全等級減半。
    • Shor 演算法:一種用於量子計算機的演算法,能夠在多項式時間內分解大整數,因此可以破解像 RSA 這樣的公鑰加密系統。
    • Grover 演算法:另一種量子演算法,它可以將暴力破解的速度提高一倍,從而將對稱加密算法(如 AES)的安全等級減半。

題意:

問了我們針對 AES 的最佳單密鑰攻擊的名稱是什麼?
答案是內文提到的 Biclique 攻擊(Biclique attack)。

crypto{Biclique}

Structure of AES

https://cryptohack.org/courses/symmetric/aes2/

內文摘要:

回顧一下上一篇文章說的AES加密過程~

AES 加密過程概覽:

  1. 密鑰擴展(KeyExpansion 或 Key Schedule)

 從 128 位元的密鑰中派生出 11 個獨立的 128 位元「輪密鑰」,每個「輪密鑰」會在每一輪的 AddRoundKey 步驟中使用。

  1. 初始密鑰添加(Initial key addition)

AddRoundKey - 將第一輪密鑰的字節與當前狀態的字節(State)進行 XOR 運算。

  1. 輪加密(Round) - 此階段進行 10 次循環,包含 9 次標準輪加密和 1 次最後一輪加密。

 a) SubBytes - 根據查找表(「S-box」)將狀態(State)的每個字節替換為不同的字節。

 b) ShiftRows - 狀態矩陣的最後三行進行轉置,分別移動一列、兩列或三列。

 c) MixColumns - 對狀態矩陣的每一列進行矩陣乘法,將每列中的四個字節組合在一起。在最後一輪中,此步驟被省略。

 d) AddRoundKey - 將當前輪密鑰的字節與狀態的字節進行 XOR 運算。

建議搭配圖片服用,方便理解。
https://hank7891.github.io/images/Aes/p1.gif

題意:

題目給了我們一個檔案,當中包含兩個函數。

  • bytes2matrix 函數:
    用來將初始明文區塊轉換為狀態矩陣,也就是加密的過程。這個函式可以不用理他,(所以我沒有放上來)。
  • matrix2bytes 函數:
    用來將矩陣轉換回字節,這部分的程式碼我們需要自己完成。

程式碼:

from Crypto.Util.number import *

def matrix2bytes(matrix):
    """ Converts a 4x4 matrix into a 16-byte array.  """
    t=b""
    for i in range(4):
        for j in range(4):
            t+=long_to_bytes(matrix[i][j])
            
    return t
matrix = [
    [99, 114, 121, 112],
    [116, 111, 123, 105],
    [110, 109, 97, 116],
    [114, 105, 120, 125],
]

print(matrix2bytes(matrix))

之後就可以得到flag為

crypto{inmatrix}

參考資料:

wiki:

後話:

今天就先這樣,接下來的題目分別會是AES加密過程的步驟實踐。


上一篇
[Day 19] 題目(Symmetric-1) & AES介紹 & 單射、滿射與對射
下一篇
[Day 21] 題目(Symmetric-4、5) & S-box 介紹
系列文
密碼學小白的學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言